package com.zhbcm.netty.utils;

import com.alibaba.fastjson.JSON;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

/**
 * 编码器（将实体类转换成可传输的数据）
 * @author 朝花不迟暮
 * @version 1.0
 * @date 2021/4/22 22:49
 */
public class RpcEncoder extends MessageToByteEncoder
{
    //目标对象类型进行编码
    private Class<?> target;

    public RpcEncoder(Class target)
    {
        this.target = target;
    }

    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, Object o, ByteBuf byteBuf) throws Exception
    {
        if (target.isInstance(o))
        {
            byte[] data = JSON.toJSONBytes(o); //使用fastJson将对象转换为byte
            byteBuf.writeInt(data.length); //先将消息长度写入，也就是消息头
            byteBuf.writeBytes(data); //消息体中包含我们要发送的数据
        }
    }
}
